package cn.b.sky.user.service;

import cn.b.sky.common.model.TreeInterface;
import cn.b.sky.user.service.model.Menu;
import cn.b.sky.user.service.model.condition.MenuCondition;

import java.util.List;

/**
 * 
 * @ClassName: MenuService 
 * @Description:菜单管理业务接口 
 * @author: ZhaoXin
 * @date: 2015-7-29 上午10:42:30
 * @version: V1.0  
 *
 */
public interface MenuService {

  /**
   * 
   * <strong>Title : selectMenuList<br></strong>
   * <strong>Description : </strong>查询菜单列表<br> 
   * <strong>Create on : 2015-8-13 下午02:27:37<br></strong>
   * <p>
   * @param isContainLock 是否包含锁定记录
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<TreeInterface> selectMenuList(String siteCode, boolean isContainLock);

  /**
   * 
  * @Title:selectMenuByCode 
  * @Description:根据菜单编号查询菜单 
  * @param menuCode
  * @return Menu
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:04:29
  * @version: V1.0
   */
  public Menu selectMenuByCode(String siteCode, String menuCode);

  /**
   * 
  * @Title:insertMenu 
  * @Description:新增菜单
  * @param menu void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:26:44
  * @version: V1.0
   */
  public void insertMenu(Menu menu);

  /**
   * 
  * @Title:updateMenu 
  * @Description:修改菜单
  * @param menu void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:33:51
  * @version: V1.0
   */
  public void updateMenu(Menu menu);

  /**
   * 
  * @Title:selectMaxOrdinal 
  * @Description:查询父节点下的最大顺序号 
  * @param parentMenuCode
  * @return int
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:40:46
  * @version: V1.0
   */
  public int selectMaxOrdinal(String siteCode, String parentMenuCode);

  /**
   * 
  * @Title:deleteMenu 
  * @Description:删除菜单
  * @param menuCode void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:44:03
  * @version: V1.0
   */
  public void deleteMenu(String siteCode, String menuCode);

  /**
   * 
  * @Title:selectRootMaxOrdinal 
  * @Description:查询根节点的最大序号
  * @return int
  * @author: ZhaoXin
  * @date: 2015-7-29 下午07:06:25
  * @version: V1.0
   */
  public int selectRootMaxOrdinal(String siteCode);

  /**
   * 
   * <strong>Title : selectMenuByParent<br></strong>
   * <strong>Description : </strong>查询子节点<br> 
   * <strong>Create on : 2015-8-13 下午02:33:12<br></strong>
   * <p>
   * @param parentMenuCode
   * @param isContainLock 是否包含锁定记录
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectMenuByParent(String siteCode, String parentMenuCode, boolean isContainLock);

  /**
   * 
   * <strong>Title : selectRootMenu<br></strong>
   * <strong>Description : </strong>查询根节点列表<br> 
   * <strong>Create on : 2015-8-13 下午02:32:39<br></strong>
   * <p>
   * @param isContainLock 是否包含锁定记录
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectRootMenu(String siteCode, boolean isContainLock);

  /**
   * 
   * <strong>Title : getCurrentUserMenus<br></strong>
   * <strong>Description : </strong>获取当前登录用户的菜单资源<br> 
   * <strong>Create on : 2016-6-24 上午11:14:05<br></strong>
   * <p>
   * @param name 用户名，code+site
   * @param language 语言
   * @return
   * List<Menu>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> getCurrentUserMenus(String name, String language);

  /**
   * 
   * <strong>Title : gradingRecursion<br></strong>
   * <strong>Description : </strong>初始化菜单树，自定义显示<br> 
   * <strong>Create on : 2015-11-26 下午3:48:53<br></strong>
   * <p>
   * @param array
   * @param parentid
   * @return
   * List<TreeInterface>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<TreeInterface> gradingRecursion(Menu[] array, String parentid);

  /**
   * 
   * <strong>Title : selectTypeMenuListByCondition<br></strong>
   * <strong>Description : </strong>查询菜单信息<br> 
   * <strong>Create on : 2016-10-26 下午3:21:04<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectTypeMenuListByCondition(MenuCondition condition);

  /**
   * 
   * <strong>Title : selectTypeMenuCountByCondition<br></strong>
   * <strong>Description : </strong>查询菜单信息行数<br> 
   * <strong>Create on : 2016-10-26 下午3:23:08<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int selectTypeMenuCountByCondition(MenuCondition condition);

  /**
   * 
   * <strong>Title : getCurrentSiteMenus<br></strong>
   * <strong>Description : </strong>获取所以此工厂的权限菜单<br> 
   * <strong>Create on : 2017-3-7 下午1:19:18<br></strong>
   * <p>
   * @param siteCode
   * @param currentLanguage
   * @return
   * List<Menu>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> getCurrentSiteMenus(String siteCode, String currentLanguage);

}
